#ifndef FHE_PRIMS_IRENDERCONTEXT_H
#define FHE_PRIMS_IRENDERCONTEXT_H

#include <fhe/math/Mat.h>
#include <fhe/prims/Material.h>
#include <boost/noncopyable.hpp>

namespace fhe
{
  namespace core
  {
    template <size_t D, typename T>
    class IRenderContext : public boost::noncopyable
    {
    public:
      typedef Mat<D,T> M;
      typedef typename M::V V;
      typedef typename M::R R;
      virtual void translate( const V& v ) = 0;
      virtual void rotate( const R& r ) = 0;
      virtual void scale( const V& v ) = 0;
      virtual void popTransform() = 0;
      
      virtual void blit( const std::string& resource ) {}
      virtual void lookAt( const V& from, const V& to, const V& up ) {}
      virtual void rect( const V& size, const Material& material ) {}
//       virtual void line( const V& from, const V& to, const Material& material ) = 0;
//       virtual void circle( const V& center, T radius, const Material& material ) = 0;
//       virtual void tri( const boost::array<V,3>& vertices, const Material& material ) = 0;
    };
    
    typedef IRenderContext<2,int> IRenderContext2i;
    typedef IRenderContext<3,double> IRenderContext3d;
  }
}

#endif
